{
  // 需求：定义一个变量，它的值只能是 'up', 'down', 'left', 'right' 中 一个
  // 用四个特殊的字符串表示 四个方向
  // 'up', 'down', 'left', 'right'
  type Directive = 'up' | 'down' |  'left' | 'right'
  let d1: Directive = "right"
  // console.log(Directive)



  // 定义枚举
  // enum Direction { 'up' = 100, 'down', 'left', 'right' }
  // console.log(Direction.right) // ===> 103
  enum Direction { 'up' = 'up', 'down'='down', 'left'='a', 'right'='b' }
  // console.log(Direction.right) ===> b


  // 使用枚举
  // 枚举的名字.XXXXX
  let d2:Direction = Direction.up


  function f(d: Direction) {
    
    if(d === Direction.left) {

    }
  }
  // 枚举比较奇怪

  // 1. ts中的类型声明语句转成js之后会丢弃
  // 但是 枚举不会！！
  // 使用枚举之后，会导致代码的体积变大
  // 2. 这个类型有值
  //  console.log()可以正常输出枚举！


  // 场景：后端给我们的性别是0(男),1(女)
  //       写代码能看到有语义的字符串，而代码运行的结果有具体的值
  enum Gender {'man', 'woman'}

  let g1: Gender = Gender.man

  console.log(g1) // ====> 0

}